Quero Challenge - Product Manager

Autor: Nandico Aquino

Repositório Github: https://github.com/nandico/pm-exploration-challenge

(Privado: Por favor solicitar acesso pelo nandico@gmail.com)

Utilize o link a seguir para pular para o case:

➡️ Pular para o case

Análise e exploração de dados (pré-case)

Inicialização da Kernel

In [1]:
import sys
import os

import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker as mtick

from datetime import datetime

import nltk
import string

from wordcloud import WordCloud

from IPython.core.display import display, HTML

Funções de ajuda (helpers)

In [2]:
def prepare_segmented_funnel(leads_df, phase_column_name, segment_column_name):
    
    leads_filtered_df = leads_df[[phase_column_name, segment_column_name]].sort_values(by=[phase_column_name])
    leads_filtered_dg = leads_filtered_df.groupby([phase_column_name, segment_column_name])
    
    leads_count_df = leads_filtered_dg[[segment_column_name]].count()
        
    phases_sr = pd.Series(leads_df[phase_column_name].unique()).sort_values()
    
    transposed_leads_count_df = pd.DataFrame()
    
    for item, value in phases_sr.iteritems():       
        transposed_leads_count_df = transposed_leads_count_df.append(
            leads_count_df.loc[value].transpose().rename(index={segment_column_name:value}),
            sort=True
        )
    
    transposed_leads_count_df.fillna(0, inplace=True)
    
    return transposed_leads_count_df
In [3]:
def relativize_total_funnel(funnel_df):
    
    rel_funnel_df = funnel_df.copy()
    
    cols = list(rel_funnel_df)
        
    for col in cols:
        max_value = rel_funnel_df[col].max()
        rel_funnel_df[col] = rel_funnel_df[col].apply(lambda x:x/max_value)
        
    return rel_funnel_df
In [4]:
def relativize_previous_step_funnel_loss(funnel_df):
    
    rel_funnel_df = funnel_df.copy()
    
    cols = list(rel_funnel_df)
        
    for col in cols:
        rel_funnel_df[col] = 1.0 - process_funnel_series_by_step(rel_funnel_df[col])
        
    return rel_funnel_df
In [5]:
def relativize_previous_step_funnel_retention(funnel_df):
    
    rel_funnel_df = funnel_df.copy()
    
    cols = list(rel_funnel_df)
        
    for col in cols:
        rel_funnel_df[col] = process_funnel_series_by_step(rel_funnel_df[col])
        
    return rel_funnel_df
In [6]:
def process_funnel_series_by_step(funnel_sr):

    funnel_ls = list(funnel_sr)
    funnel_new_ls = funnel_ls.copy()
    
    for i, val in enumerate(funnel_ls): 
        if i > 0:
            previous_value = funnel_ls[i - 1]
        else:
            previous_value = 0
        
        if previous_value != 0:
            funnel_new_ls[i] = funnel_ls[i] / previous_value
        else:
            funnel_new_ls[i] = 0

    return pd.Series(funnel_new_ls, index=funnel_sr.keys())
In [7]:
def display_segmented_funnels(leads_df, phase_column_name, segment_column_name):
    
    funnel_df = prepare_segmented_funnel(leads_df, phase_column_name, segment_column_name)
    
    display(HTML('<h5>{} - distribuição bruta</h5>'.format(segment_column_name)));
    display(funnel_df)
        
    funnel_percent_total_df = relativize_total_funnel(funnel_df)
    
    display(HTML('<h5>{} - percentual de retenção em relação à boca do funil</h5>'.format(segment_column_name)));
    display(funnel_percent_total_df)
    
    funnel_percent_step_retention_df = relativize_previous_step_funnel_retention(funnel_df)
    
    display(HTML('<h5>{} - percentual de retenção em relação ao passo anterior</h5>'.format(segment_column_name)));
    display(funnel_percent_step_retention_df)
    
    funnel_percent_step_loss_df = relativize_previous_step_funnel_loss(funnel_df)

    
    display(HTML('<h5>{} - percentual de perda em relação ao passo anterior</h5>'.format(segment_column_name)));
    display(funnel_percent_step_loss_df)
    
    return [funnel_df, funnel_percent_total_df, funnel_percent_step_retention_df, funnel_percent_step_loss_df]

Leitura de dados

Ordens

In [8]:
orders_na = [
    ' - '
]
In [9]:
orders_df = pd.read_excel('../data/Case.xlsx', thousands=',', na_values=orders_na, verbose=False, sheet_name=0)

Questões

In [10]:
questions_df = pd.read_excel('../data/Case.xlsx', thousands=',', sheet_name=1)

Exploração

Ordens

Descrição dos campos e tipos de dados da base de dados de ordens:

In [11]:
orders_df.dtypes
Out[11]:
Preço cheio no comprovante           float64
Preço com desconto no comprovante    float64
Percentual de desconto               float64
Preço do comprovante                 float64
Etapa de checkout                     object
Nome do curso                         object
Nível do curso                        object
Modalidade do curso                   object
Turno do curso                        object
Estado do campus                      object
Ano que prestou ENEM                   int64
Nota no ENEM de exatas               float64
Como conheceu o QB                    object
Tipo do Pagamento                     object
dtype: object

Amostra da base de dados de ordens (primeiros registros):

In [12]:
orders_df.head()
Out[12]:
Preço cheio no comprovante Preço com desconto no comprovante Percentual de desconto Preço do comprovante Etapa de checkout Nome do curso Nível do curso Modalidade do curso Turno do curso Estado do campus Ano que prestou ENEM Nota no ENEM de exatas Como conheceu o QB Tipo do Pagamento
0 681.42 476.99 30.0 476.99 Comprometido Enfermagem Bacharelado (graduação) Presencial Manhã MG 0 NaN google NaN
1 229.00 160.30 30.0 160.30 Comprometido Estética Facial e Corporal Pós-graduação Lato Sensu EaD Virtual SP 0 NaN google NaN
2 NaN NaN NaN 675.38 Iniciado Enfermagem Bacharelado (graduação) Presencial Manhã DF 2015 504.0 amigo NaN
3 723.45 578.76 20.0 150.00 Comprometido Educação Física Graduação Presencial Noite MA 0 NaN google NaN
4 NaN NaN NaN 190.80 Registrado Engenharia Civil Bacharelado (graduação) Presencial Noite SP 2014 494.0 google NaN

Sumário estatístico da base de ordens (tendência central, dispersão e formato do dataset):

In [13]:
orders_df.describe()
Out[13]:
Preço cheio no comprovante Preço com desconto no comprovante Percentual de desconto Preço do comprovante Ano que prestou ENEM Nota no ENEM de exatas
count 18790.000000 18790.000000 18790.000000 65727.000000 65728.000000 19433.000000
mean 688.728952 425.924186 35.606495 422.569253 594.984968 477.482736
std 399.160500 233.573609 12.049557 314.334602 918.917128 71.150576
min 100.000000 70.000000 5.000000 29.900000 0.000000 50.000000
25% 381.000000 251.020000 29.790000 150.000000 0.000000 430.000000
50% 632.920000 395.500000 30.000000 325.150000 0.000000 474.000000
75% 905.210000 543.960000 44.000000 594.255000 2013.000000 522.000000
max 4145.000000 2072.500000 80.290000 2242.600000 2016.000000 888.000000

Transformação de dados

In [14]:
orders_df['Etapa de checkout'].replace(
    to_replace=['Iniciado', 'Registrado', 'Comprometido', 'Pago'], 
    value=['A: Iniciado', 'B: Registrado', 'C: Comprometido', 'D: Pago'],
    inplace=True
)

Questionamentos

Qual a matriz de correlação da base de dados de ordens?

In [15]:
corr = orders_df.corr()
corr.style.background_gradient(cmap='coolwarm')
Out[15]:
Preço cheio no comprovante Preço com desconto no comprovante Percentual de desconto Preço do comprovante Ano que prestou ENEM Nota no ENEM de exatas
Preço cheio no comprovante 1 0.895082 0.365387 0.49839 0.106662 0.0566777
Preço com desconto no comprovante 0.895082 1 -0.035854 0.418117 0.114031 0.0458217
Percentual de desconto 0.365387 -0.035854 1 0.295735 0.00665991 0.0305757
Preço do comprovante 0.49839 0.418117 0.295735 1 0.0816946 0.030587
Ano que prestou ENEM 0.106662 0.114031 0.00665991 0.0816946 1 0.0025198
Nota no ENEM de exatas 0.0566777 0.0458217 0.0305757 0.030587 0.0025198 1

Qual a distribuição das etapas de checkout?

In [16]:
orders_df['Etapa de checkout'].value_counts(sort=True, ascending=True).plot.barh();

Qual a distribuição segmentada das etapas de funil por origem?

In [17]:
filtered_refferal_orders_df = orders_df[
    (orders_df['Como conheceu o QB'] == 'amigo') | 
    (orders_df['Como conheceu o QB'] == 'email') |
    (orders_df['Como conheceu o QB'] == 'facebook') |
    (orders_df['Como conheceu o QB'] == 'faculdade') |
    (orders_df['Como conheceu o QB'] == 'google')
]
In [18]:
display_segmented_funnels(filtered_refferal_orders_df, 'Etapa de checkout', 'Como conheceu o QB');
Como conheceu o QB - distribuição bruta
Como conheceu o QB amigo email facebook faculdade google
A: Iniciado 1279 156 761 585 11066
B: Registrado 1658 223 724 480 17808
C: Comprometido 873 129 377 327 9690
D: Pago 751 42 186 602 4123
Como conheceu o QB - percentual de retenção em relação à boca do funil
Como conheceu o QB amigo email facebook faculdade google
A: Iniciado 0.771411 0.699552 1.000000 0.971761 0.621406
B: Registrado 1.000000 1.000000 0.951380 0.797342 1.000000
C: Comprometido 0.526538 0.578475 0.495401 0.543189 0.544137
D: Pago 0.452955 0.188341 0.244415 1.000000 0.231525
Como conheceu o QB - percentual de retenção em relação ao passo anterior
Como conheceu o QB amigo email facebook faculdade google
A: Iniciado 0.000000 0.000000 0.000000 0.000000 0.000000
B: Registrado 1.296325 1.429487 0.951380 0.820513 1.609254
C: Comprometido 0.526538 0.578475 0.520718 0.681250 0.544137
D: Pago 0.860252 0.325581 0.493369 1.840979 0.425490
Como conheceu o QB - percentual de perda em relação ao passo anterior
Como conheceu o QB amigo email facebook faculdade google
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000
B: Registrado -0.296325 -0.429487 0.048620 0.179487 -0.609254
C: Comprometido 0.473462 0.421525 0.479282 0.318750 0.455863
D: Pago 0.139748 0.674419 0.506631 -0.840979 0.574510

Qual a distribuição segmentada das etapas de funil por meio de pagamento?

In [19]:
filtered_payment_orders_df = orders_df[orders_df['Tipo do Pagamento'].notnull()]
In [20]:
display_segmented_funnels(filtered_payment_orders_df, 'Etapa de checkout', 'Tipo do Pagamento');
Tipo do Pagamento - distribuição bruta
Tipo do Pagamento Boleto CreditCard
D: Pago 3640 2583
Tipo do Pagamento - percentual de retenção em relação à boca do funil
Tipo do Pagamento Boleto CreditCard
D: Pago 1.0 1.0
Tipo do Pagamento - percentual de retenção em relação ao passo anterior
Tipo do Pagamento Boleto CreditCard
D: Pago 0 0
Tipo do Pagamento - percentual de perda em relação ao passo anterior
Tipo do Pagamento Boleto CreditCard
D: Pago 1.0 1.0

Qual a distribuição segmentada das etapas de funil por modalidade do curso?

In [21]:
display_segmented_funnels(orders_df, 'Etapa de checkout', 'Modalidade do curso');
Modalidade do curso - distribuição bruta
Modalidade do curso EaD Presencial Semipresencial
A: Iniciado 5031 19466 184
B: Registrado 3470 18603 184
C: Comprometido 2744 9697 126
D: Pago 1295 4858 69
Modalidade do curso - percentual de retenção em relação à boca do funil
Modalidade do curso EaD Presencial Semipresencial
A: Iniciado 1.000000 1.000000 1.000000
B: Registrado 0.689724 0.955666 1.000000
C: Comprometido 0.545418 0.498151 0.684783
D: Pago 0.257404 0.249563 0.375000
Modalidade do curso - percentual de retenção em relação ao passo anterior
Modalidade do curso EaD Presencial Semipresencial
A: Iniciado 0.000000 0.000000 0.000000
B: Registrado 0.689724 0.955666 1.000000
C: Comprometido 0.790778 0.521260 0.684783
D: Pago 0.471939 0.500980 0.547619
Modalidade do curso - percentual de perda em relação ao passo anterior
Modalidade do curso EaD Presencial Semipresencial
A: Iniciado 1.000000 1.000000 1.000000
B: Registrado 0.310276 0.044334 0.000000
C: Comprometido 0.209222 0.478740 0.315217
D: Pago 0.528061 0.499020 0.452381

Qual a distribuição segmentada das etapas de funil por Nome do curso?

A filtragem por nome do curso necessita da criação de um dicionário de sinônimos para nome do curso, o que não é viável pelo tempo da análise.

Qual a distribuição segmentada das etapas de funil conforme o valor do desconto?

Informações de valor de desconto anotadas na base apenas para as etapas C: Comprometido e D: Pago.

Qual a distribuição segmentada das etapas de funil conforme o nível do curso?

In [22]:
filtered_level_orders_df = orders_df[
    (orders_df['Nível do curso'] == 'Bacharelado (graduação)') | 
    (orders_df['Nível do curso'] == 'Graduação') |
    (orders_df['Nível do curso'] == 'Licenciatura (graduação)') |
    (orders_df['Nível do curso'] == 'Pós-graduação Lato Sensu') |
    (orders_df['Nível do curso'] == 'Tecnólogo (graduação)')
]
In [23]:
display_segmented_funnels(filtered_level_orders_df, 'Etapa de checkout', 'Nível do curso');
Nível do curso - distribuição bruta
Nível do curso Bacharelado (graduação) Graduação Licenciatura (graduação) Pós-graduação Lato Sensu Tecnólogo (graduação)
A: Iniciado 14504 1135 2260 2921 3452
B: Registrado 13768 1068 1728 2009 3278
C: Comprometido 7235 705 1159 1399 1860
D: Pago 3629 448 490 560 992
Nível do curso - percentual de retenção em relação à boca do funil
Nível do curso Bacharelado (graduação) Graduação Licenciatura (graduação) Pós-graduação Lato Sensu Tecnólogo (graduação)
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000
B: Registrado 0.949255 0.940969 0.764602 0.687778 0.949594
C: Comprometido 0.498828 0.621145 0.512832 0.478946 0.538818
D: Pago 0.250207 0.394714 0.216814 0.191715 0.287370
Nível do curso - percentual de retenção em relação ao passo anterior
Nível do curso Bacharelado (graduação) Graduação Licenciatura (graduação) Pós-graduação Lato Sensu Tecnólogo (graduação)
A: Iniciado 0.000000 0.000000 0.000000 0.000000 0.000000
B: Registrado 0.949255 0.940969 0.764602 0.687778 0.949594
C: Comprometido 0.525494 0.660112 0.670718 0.696366 0.567419
D: Pago 0.501589 0.635461 0.422778 0.400286 0.533333
Nível do curso - percentual de perda em relação ao passo anterior
Nível do curso Bacharelado (graduação) Graduação Licenciatura (graduação) Pós-graduação Lato Sensu Tecnólogo (graduação)
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000
B: Registrado 0.050745 0.059031 0.235398 0.312222 0.050406
C: Comprometido 0.474506 0.339888 0.329282 0.303634 0.432581
D: Pago 0.498411 0.364539 0.577222 0.599714 0.466667

Qual a distribuição segmentada das etapas de funil conforme o turno do curso?

In [24]:
display_segmented_funnels(filtered_level_orders_df, 'Etapa de checkout', 'Turno do curso');
Turno do curso - distribuição bruta
Turno do curso Integral Manhã Noite Outro Tarde Virtual
A: Iniciado 131 6291 11447 1534 618 4251
B: Registrado 95 5685 11297 1421 587 2766
C: Comprometido 50 3049 5831 945 250 2233
D: Pago 20 1478 2981 619 72 949
Turno do curso - percentual de retenção em relação à boca do funil
Turno do curso Integral Manhã Noite Outro Tarde Virtual
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
B: Registrado 0.725191 0.903672 0.986896 0.926336 0.949838 0.650670
C: Comprometido 0.381679 0.484661 0.509391 0.616037 0.404531 0.525288
D: Pago 0.152672 0.234939 0.260418 0.403520 0.116505 0.223242
Turno do curso - percentual de retenção em relação ao passo anterior
Turno do curso Integral Manhã Noite Outro Tarde Virtual
A: Iniciado 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
B: Registrado 0.725191 0.903672 0.986896 0.926336 0.949838 0.650670
C: Comprometido 0.526316 0.536324 0.516155 0.665025 0.425894 0.807303
D: Pago 0.400000 0.484749 0.511233 0.655026 0.288000 0.424989
Turno do curso - percentual de perda em relação ao passo anterior
Turno do curso Integral Manhã Noite Outro Tarde Virtual
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
B: Registrado 0.274809 0.096328 0.013104 0.073664 0.050162 0.349330
C: Comprometido 0.473684 0.463676 0.483845 0.334975 0.574106 0.192697
D: Pago 0.600000 0.515251 0.488767 0.344974 0.712000 0.575011

Qual a distribuição segmentada das etapas de funil conforme a localidade do curso?

In [25]:
filtered_campus_state_df = orders_df[
    (orders_df['Estado do campus'] == 'SP') | 
    (orders_df['Estado do campus'] == 'RJ') |
    (orders_df['Estado do campus'] == 'AM') |
    (orders_df['Estado do campus'] == 'DF') |
    (orders_df['Estado do campus'] == 'MG') |
    (orders_df['Estado do campus'] == 'PE') |
    (orders_df['Estado do campus'] == 'BA')
]
In [26]:
display_segmented_funnels(filtered_campus_state_df, 'Etapa de checkout', 'Estado do campus');
Estado do campus - distribuição bruta
Estado do campus AM BA DF MG PE RJ SP
A: Iniciado 2245 935 1654 1433 1070 2929 8276
B: Registrado 1916 750 1499 1087 876 2832 8492
C: Comprometido 1240 530 876 841 472 1503 3919
D: Pago 416 187 476 352 243 580 2569
Estado do campus - percentual de retenção em relação à boca do funil
Estado do campus AM BA DF MG PE RJ SP
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.974564
B: Registrado 0.853452 0.802139 0.906288 0.758548 0.818692 0.966883 1.000000
C: Comprometido 0.552339 0.566845 0.529625 0.586881 0.441121 0.513144 0.461493
D: Pago 0.185301 0.200000 0.287787 0.245639 0.227103 0.198020 0.302520
Estado do campus - percentual de retenção em relação ao passo anterior
Estado do campus AM BA DF MG PE RJ SP
A: Iniciado 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
B: Registrado 0.853452 0.802139 0.906288 0.758548 0.818692 0.966883 1.026100
C: Comprometido 0.647182 0.706667 0.584390 0.773689 0.538813 0.530720 0.461493
D: Pago 0.335484 0.352830 0.543379 0.418549 0.514831 0.385895 0.655524
Estado do campus - percentual de perda em relação ao passo anterior
Estado do campus AM BA DF MG PE RJ SP
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
B: Registrado 0.146548 0.197861 0.093712 0.241452 0.181308 0.033117 -0.026100
C: Comprometido 0.352818 0.293333 0.415610 0.226311 0.461187 0.469280 0.538507
D: Pago 0.664516 0.647170 0.456621 0.581451 0.485169 0.614105 0.344476

Qual a distribuição segmentada das etapas de funil conforme o ano que prestou ENEM

In [27]:
display_segmented_funnels(
    orders_df[orders_df['Ano que prestou ENEM'] > 0], 
    'Etapa de checkout', 
    'Ano que prestou ENEM'
);
Ano que prestou ENEM - distribuição bruta
Ano que prestou ENEM 2009 2010 2011 2012 2013 2014 2015 2016
A: Iniciado 94 140 220 240 433 1103 3319 273
B: Registrado 109 226 281 310 581 1478 4292 270
C: Comprometido 58 134 151 178 321 720 2221 127
D: Pago 48 59 92 105 149 381 1267 36
Ano que prestou ENEM - percentual de retenção em relação à boca do funil
Ano que prestou ENEM 2009 2010 2011 2012 2013 2014 2015 2016
A: Iniciado 0.862385 0.619469 0.782918 0.774194 0.745267 0.746279 0.773299 1.000000
B: Registrado 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.989011
C: Comprometido 0.532110 0.592920 0.537367 0.574194 0.552496 0.487145 0.517474 0.465201
D: Pago 0.440367 0.261062 0.327402 0.338710 0.256454 0.257781 0.295200 0.131868
Ano que prestou ENEM - percentual de retenção em relação ao passo anterior
Ano que prestou ENEM 2009 2010 2011 2012 2013 2014 2015 2016
A: Iniciado 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
B: Registrado 1.159574 1.614286 1.277273 1.291667 1.341801 1.339982 1.293161 0.989011
C: Comprometido 0.532110 0.592920 0.537367 0.574194 0.552496 0.487145 0.517474 0.470370
D: Pago 0.827586 0.440299 0.609272 0.589888 0.464174 0.529167 0.570464 0.283465
Ano que prestou ENEM - percentual de perda em relação ao passo anterior
Ano que prestou ENEM 2009 2010 2011 2012 2013 2014 2015 2016
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
B: Registrado -0.159574 -0.614286 -0.277273 -0.291667 -0.341801 -0.339982 -0.293161 0.010989
C: Comprometido 0.467890 0.407080 0.462633 0.425806 0.447504 0.512855 0.482526 0.529630
D: Pago 0.172414 0.559701 0.390728 0.410112 0.535826 0.470833 0.429536 0.716535

Qual a distribuição de preço cheio no comprovante?

In [28]:
bins=30

plt.figure(
    figsize=(15,8)
)
plt.hist(
    orders_df['Preço cheio no comprovante'].dropna().clip(lower=100, upper=2000), 
    bins=bins, 
    alpha=0.5, 
    rwidth=0.8,
    label='Preço cheio'
)
plt.hist(
    orders_df['Preço com desconto no comprovante'].dropna().clip(lower=100, upper=2000),
    bins=bins,
    alpha=0.5,
    rwidth=0.8,
    label='Preço com desconto'
)
plt.title('Distribuição por preço cheio / preço com desconto')
plt.legend(loc='upper right')
plt.show()

Questões

Descrição dos campos e tipos de dados da base de dados de questões:

In [29]:
questions_df.dtypes
Out[29]:
Universidade    object
Curso           object
Pergunta        object
dtype: object

Amostra da base de dados de ordens (quatro primeiros registros):

In [30]:
questions_df.head()
Out[30]:
Universidade Curso Pergunta
0 Estácio Engenharia Mecânica Minha empresa e parceira da Estácio e tenho...
1 UNIP Direito Gente isso funciona mesmo?
2 UNIJORGE Administração Qual o critério para angariar a bolsa na Unij...
3 FAUC / AUM Educação Física Quero esta bolsa de educação física como faço
4 UNIP NaN Por que os alunos que já estão matriculados n...

Transformação de dados

In [31]:
print("Total de dúvidas na base: {}".format(len(questions_df)))
Total de dúvidas na base: 107
In [32]:
questions_df.drop_duplicates(inplace=True)

Remoção de registros duplicados:

In [33]:
print("Total de dúvidas na base: {}".format(len(questions_df)))
Total de dúvidas na base: 102

Questionamentos

Como está a distribuição dos questionamentos por curso?

Sete principais cursos entre os usuários da amostra:

In [34]:
questions_df['Curso'].value_counts(sort=True, ascending=False)[0:10].plot.bar(figsize=[10,5]);

Como está a distribuição dos questionamentos por universidade?

Dez principais universidades entre os usuários da amostra:

In [35]:
questions_df['Universidade'].value_counts(sort=True, ascending=False)[0:10].plot.bar(figsize=[10,5]);

Quais as principais palavras usadas na base de questionamentos?

In [36]:
nltk.download('stopwords');
[nltk_data] Downloading package stopwords to
[nltk_data]     /home/ec2-user/nltk_data...
[nltk_data]   Package stopwords is already up-to-date!
In [37]:
stopwords_pt_nltk = nltk.corpus.stopwords.words('portuguese')
In [38]:
with open("stopwords.txt", 'r', encoding='utf-8') as f:
    stopwords_pt_custom_raw = f.readlines()
In [39]:
stopwords_pt_custom = list(map(lambda x: x.strip('\n').strip(), stopwords_pt_custom_raw))
In [40]:
def remove_stopwords(text):
    
    global stopwords_pt_nltk
    global stopwords_pt_custom
    
    text = text.translate(str.maketrans('', '', string.punctuation)).lower()
    
    filtered = []
    
    for word in text.split():
        if word not in stopwords_pt_nltk:
            if word not in stopwords_pt_custom:
                filtered.append(word)
                
    return ' '.join(filtered);
In [41]:
questions_df["Pergunta NSW"] = questions_df["Pergunta"].apply(remove_stopwords)
In [42]:
questions_words = ' '.join(questions_df["Pergunta NSW"].tolist())
questions_pure_words = ' '.join(questions_df["Pergunta"].tolist())
In [43]:
wordcloud = WordCloud(
    background_color='white', 
    max_words=500
).generate(questions_words)
plt.figure(
    dpi=300,
    figsize=(15,8)
)
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.title('Palavras')
plt.show()

Quais as colocações mais importantes do texto, conforme o NLTK?

In [44]:
from nltk import tokenize
from nltk.text import Text
In [45]:
nltk.download('punkt');
[nltk_data] Downloading package punkt to /home/ec2-user/nltk_data...
[nltk_data]   Package punkt is already up-to-date!
In [46]:
tokens = tokenize.word_tokenize(questions_words)
pure_tokens = tokenize.word_tokenize(questions_pure_words)
In [47]:
text = Text(tokens, name="Questões dos clientes")
pure_text = Text(pure_tokens, name="Questões dos clientes (Brutas)")

Colocações no NLTK são expressões de múltiplas palavras que mais comumente ocorrem no texto.

Colocações mais importantes a partir do texto com stopwords removidas:

In [48]:
text.collocations()
quero bolsa; gostaria saber; engenharia produção; curso gestão;
conseguir bolsa; curso direito; curso técnico; distancia curso; vocãªs
curso; saber posso; gostaria fazer; curso engenharia; mensalidade
curso; fazer curso; bolsa curso

Colocações mais importantes a partir do texto original:

In [49]:
pure_text.collocations()
uma bolsa; pelo MEC; quero bolsa; Boa noite; Como faço; faço pra; como
faço; educa mais; faze pra; das mensalidades; funciona mesmo; Vocês
tem; Como funciona; como posso; curso gestão; faço para; bolsa para;
para fazer

Como está a distribuição das palavras por frequência?

In [50]:
plt.figure(figsize=(12,6))
text.vocab().plot(30, cumulative=False)

Em que contexto aparecem as palavras mais frequentes nas dúvidas dos usuários?

In [51]:
frequency_df = pd.DataFrame.from_dict(text.vocab(), orient='index', columns=['count'])
In [52]:
frequency_df.sort_values(by=['count'], ascending=False, inplace=True)
In [53]:
for idx in frequency_df[frequency_df["count"] > 5].index:
    display(HTML('<h5>{}</h5>'.format(idx)));
    pure_text.concordance(idx);
curso
Displaying 25 of 25 matches:
la ? Posso usar o quero bolsa para o curso Enfermagem Forense Obrigadalia ? QUE
a Quantos custa a mensalidade para o curso de direito ? Quanto está a graduação
terapia e nutrição. ? Mensalidade do curso de direito qual a taxa de aumento da
o custa e o que preciso para fazer o curso de direito gostaria ir tem esperançã
oe ! Oi oi boa noite qual o valor do curso sem a bolsa ? No site `` http : //po
 valor e³R $ 354 POR FAVOR COLOCA O CURSO DE DESIGN GRíFICO NO PERíODO DA MANH
! Gostaria de saber se este ano terá curso de convalidação de Teologia ? Precis
o de resposta com urgência . Se tem curso de auxiliar bucal tem Engenharia de 
staria de saber se tem bolsas para o curso de técnico em segurançã do trabalho 
õe Tem gastronomia ? ? Vocês tem o curso de técnico em patologia ? Só tem ess
 preço das mensalidades Vocês tem o curso de licenciatura em Letras ( língua p
) Quero saber se vai tá disponível o curso de educação fisica Tem bolsa para o 
 de educação fisica Tem bolsa para o curso gestão de segurançã privada ? Tem cu
so gestão de segurançã privada ? Tem curso psicologia em Manaus ? Os professore
de ? é presencial ou a distancia ? o curso de serviço social é a distancia ? Es
 serviço social é a distancia ? Esse Curso e Presencial ou a Distância ? Pode 
¢ncia ? Pode ser feito a destancia O curso de engenharia elétrica semi presenci
ção é credenciada pelo MEC EAD ? e o curso de engenharia de produção ead é reco
 reconhecido pelo MEC qual a nota do curso segundo o mec ? o curso atende as no
al a nota do curso segundo o mec ? o curso atende as normas do MEC ? Gostaria d
Ha alguma forma de estagio no fim do curso ... gostei dessa faculdade.. O estág
ais são as disciplinas oferecidas no curso de gestão de processos ? Olá gostari
lho federal de farmácia so reconhece curso de graduação de 5 anos . Sendo que n
sper e ate em outras faculdades vejo curso de farmácia ministrado em 4 anos . O
ando são os vestibulares Horários do curso gestão da qualidade Quando sera´ o 
bolsa
Displaying 23 of 23 matches:
ue vou pagar .ou seja se posso ter 2 bolsa Gente isso funciona mesmo ? Qual o c
mo ? Qual o critério para angariar a bolsa na Unijorge ? Quero esta bolsa de ed
iar a bolsa na Unijorge ? Quero esta bolsa de educação física como faço Por que
tão matriculados não podem conseguir bolsa pelo programa quero bolsa ? . Visto 
 conseguir bolsa pelo programa quero bolsa ? . Visto que é melhor liberar uma b
a ? . Visto que é melhor liberar uma bolsa do que perder uma matrícula . Oi boa
a matrícula . Oi boa tarde . O quero bolsa funciona mesmo na unp ? no caso é só
zer a matrícula ? Posso usar o quero bolsa para o curso Enfermagem Forense Obri
GO NA FATEPA como posso consegur uma bolsa Gostaria de fazer pedagogia Boa noit
agogia Boa noite.Meu irmão conseguiu bolsa de 50 % pelo educa mais como posso f
ino medio Como faço pra adquirir uma bolsa de enfermagem noturno em Belém Ainda
elém Ainda da tempo de conseguir uma bolsa nesse semestre ? ingresso ainda no 1
esso ainda no 1o semestre 2017 Com a bolsa do educa mais brasil e possivel acre
 brasil e possivel acrescentar outra bolsa Como faço pra ganha meia bolca para 
mo ? se a pessoa o aluno conseguir a bolsa de estudo a bolsa de ciência da com
 aluno conseguir a bolsa de estudo a bolsa de ciência da computação estava em 
nos e um sonho a ser realizado Quero bolsa de radiologia Como faço para con seg
ologia Como faço para con seguir uma bolsa .pois quero muito . Boa noite ! Minh
 é colombiana como faço pra ganhar a bolsa de 50 % de desconto ? como conseguir
de desconto ? como conseguir o quero bolsa para odonto ? Como funciona quero bo
sa para odonto ? Como funciona quero bolsa quanto pago na matricula Jí TENHO O 
oa noite qual o valor do curso sem a bolsa ? No site `` http : //pos.estacio.br
nível o curso de educação fisica Tem bolsa para o curso gestão de segurançã pri
quero
Displaying 13 of 13 matches:
 para angariar a bolsa na Unijorge ? Quero esta bolsa de educação física como f
 podem conseguir bolsa pelo programa quero bolsa ? . Visto que é melhor liberar
der uma matrícula . Oi boa tarde . O quero bolsa funciona mesmo na unp ? no cas
e e fazer a matrícula ? Posso usar o quero bolsa para o curso Enfermagem Forens
rso Enfermagem Forense Obrigadalia ? QUERO FAZER TECNICO Enfermagem QUERO COMEÃ
lia ? QUERO FAZER TECNICO Enfermagem QUERO COMEÇA LOGO NA FATEPA como posso co
o 54 anos e um sonho a ser realizado Quero bolsa de radiologia Como faço para c
faço para con seguir uma bolsa .pois quero muito . Boa noite ! Minha afilhada é
 50 % de desconto ? como conseguir o quero bolsa para odonto ? Como funciona qu
ro bolsa para odonto ? Como funciona quero bolsa quanto pago na matricula Jí TE
pre matricula pagamento a boleto não quero mais ainda não paguei Valor engenhar
ra em Letras ( língua portuguesa ? ) Quero saber se vai tá disponível o curso d
Olá gostaria de fazer Estética porém quero focar Mais na estética clínica.. Ter
fazer
Displaying 9 of 9 matches:
? no caso é só levar o comprovante e fazer a matrícula ? Posso usar o quero bol
fermagem Forense Obrigadalia ? QUERO FAZER TECNICO Enfermagem QUERO COMEÇA LOG
posso consegur uma bolsa Gostaria de fazer pedagogia Boa noite.Meu irmão conseg
er quanto custa e o que preciso para fazer o curso de direito gostaria ir tem e
estão de processos ? Olá gostaria de fazer Estética porém quero focar Mais na e
ONVALIDAM CREDITOS Oi como faço para fazer minha inscrição ? ? ? quando abre no
ultimo ano de psicologia também pode fazer o curso ? Eu consigo fazer fies para
mbém pode fazer o curso ? Eu consigo fazer fies para o curso de nutrição ? Eu p
 em arapongas mas se eu quiser posso fazer em Curitiba ? EU Jí ESTOU NO QUARTO 
saber
Displaying 8 of 8 matches:
 saber se posso ganha esse 50 % no valor va
 Boa dia abençoado ( a ) gostaria de saber quanto custa e o que preciso para fa
NHÃ TAMBÉM ? ? ? ! ! ! Gostaria de saber se este ano terá curso de convalidaç
Tem enfermagem Bom dia ! Gostaria de saber se tem bolsas para o curso de técnic
Letras ( língua portuguesa ? ) Quero saber se vai tá disponível o curso de educ
tende as normas do MEC ? Gostaria de saber sobre a regulamentação e quais certi
 Quala nota mo mec ? ola gostaria de saber se eu posso financiar o restante da 
a de ter acesso a grade curricular e saber quais os professores que ministram a
posso
Displaying 8 of 8 matches:
 posso ganha esse 50 % no valor valor que v
alor valor que vou pagar .ou seja se posso ter 2 bolsa Gente isso funciona mesm
 o comprovante e fazer a matrícula ? Posso usar o quero bolsa para o curso Enfe
em QUERO COMEÇA LOGO NA FATEPA como posso consegur uma bolsa Gostaria de fazer
u bolsa de 50 % pelo educa mais como posso faze pra faze pra entra ... eu termi
mo mec ? ola gostaria de saber se eu posso financiar o restante da mensalidade 
UNOPAR em arapongas mas se eu quiser posso fazer em Curitiba ? EU Jí ESTOU NO Q
QUARTO SEMESTRE DE EDUCAÇÃO FíSICA Posso cursar mais de um curso na Unifran ?
gostaria
Displaying 9 of 9 matches:
ATEPA como posso consegur uma bolsa Gostaria de fazer pedagogia Boa noite.Meu ir
estre/ano ? Boa dia abençoado ( a ) gostaria de saber quanto custa e o que preci
eciso para fazer o curso de direito gostaria ir tem esperançã de estuda nessa fa
RíODO DA MANHÃ TAMBÉM ? ? ? ! ! ! Gostaria de saber se este ano terá curso de 
e produção Tem enfermagem Bom dia ! Gostaria de saber se tem bolsas para o curso
? o curso atende as normas do MEC ? Gostaria de saber sobre a regulamentação e q
elo MEC ? ? Quala nota mo mec ? ola gostaria de saber se eu posso financiar o re
 curso de gestão de processos ? Olá gostaria de fazer Estética porém quero focar
 clínica.. Teria como ? Boa noite ! Gostaria de ter acesso a grade curricular e 
mec
Displaying 6 of 6 matches:
? Essa instituição é credenciada pelo MEC EAD ? e o curso de engenharia de prod
ia de produção ead é reconhecido pelo MEC qual a nota do curso segundo o mec ? 
lo MEC qual a nota do curso segundo o mec ? o curso atende as normas do MEC ? G
o o mec ? o curso atende as normas do MEC ? Gostaria de saber sobre a regulamen
a dá Unifran. ? ? É reconhecida pelo MEC ? ? Quala nota mo mec ? ola gostaria 
econhecida pelo MEC ? ? Quala nota mo mec ? ola gostaria de saber se eu posso f
valor
Displaying 6 of 6 matches:
ia saber se posso ganha esse 50 % no valor valor que vou pagar .ou seja se poss
er se posso ganha esse 50 % no valor valor que vou pagar .ou seja se posso ter 
leto não quero mais ainda não paguei Valor engenharia civil em Mogi das cruzes 
ngenharia civil em Mogi das cruzes ? Valor mensalidade da especializacao de enf
e e abençoe ! Oi oi boa noite qual o valor do curso sem a bolsa ? No site `` ht
//pos.estacio.br/ # inscreva-se `` o valor e³R $ 354 POR FAVOR COLOCA O CURSO 
faço
Displaying 6 of 6 matches:
ro esta bolsa de educação física como faço Por que os alunos que já estão matric
eu terminei agora o ensino medio Como faço pra adquirir uma bolsa de enfermagem 
possivel acrescentar outra bolsa Como faço pra ganha meia bolca para 2018 É gra
lizado Quero bolsa de radiologia Como faço para con seguir uma bolsa .pois quero
te ! Minha afilhada é colombiana como faço pra ganhar a bolsa de 50 % de descont
lar ? VCS CONVALIDAM CREDITOS Oi como faço para fazer minha inscrição ? ? ? quan

Case de Produto - Quero Educação

Apresentação

Olá,

Meu nome é Nandico Aquino. Sou empreendedor e gerente de produto.

Durante os últimos vinte anos eu trabalhei com produtos digitais atendendo a empresas como Fiat Chrysler Automobiles, Renault, Nestlé, Whirpool, Pepsico, Unilever, HBO e Weather Channel.

Possuo um histórico de habilidades técnicas com capacidades atualizadas em análise de dados para gestão de produto, desenvolvimento web e desenvolvimento móvel.

Dediquei os anos mais recentes de minha carreira trabalhando em atividades associadas à gestão de produto (product management), trabalhando com pessoas de excelência técnica mundial em design e programação.

Nas redes

**Github:** https://github.com/nandico
**Twitter:** https://twitter.com/nandico

Sobre o case

Este trabalho é uma resposta ao Quero Challenge: Desafio de recrutamento da Quero Educação voltado para seleção para a vaga de Group Product Manager.

O descritivo do desafio foi enviado por Letícia Rosas através do link: https://drive.google.com/file/d/1fB8mZopweZbIXBc7joKsZfRrg2J12THi/view?usp=sharing

O objetivo central do desafio é analisar dois conjuntos de dados amostrais distintos e realizar análise heurística do canal https://querobolsa.com.br/ para falar sobre questões estratégicas do produto Quero Bolsa.

Abordagem de resolução: O Jupyter Notebook

Minha ferramenta de escolha para a resolução do case foi o Jupyter Notebook, uma aplicação web open source que permtie criar e compartilhar documentos contendo código de programação, equações, visualizações e narrativas de texto.

A solução pelo Jupyter apresenta como pontos positivos:

  • Leitura, transformação e higienização das fontes de dados carregadas de modo direto e prático, com a origem dos dados em mesmo formato podendo variar no futuro (substituição das bases amostrais pelas bases reais).
  • Capacidade de exploração descritiva dos dados e criação de visualizações de dados no mesmo ambiente.
  • Possibilidade de integração com recursos como o NLTK (Natural Language Toolkit) para processamento da base de questões geradas pelos usuários.
  • Integração com Github, processamento em nuvem e possibilidade de reuso dos recursos por outros Product Managers no time.
  • Capacidade de Markdown para geração de documentação acompanhada de código Python executável por qualquer pessoa.

A exploração das narrativas podem variar em profundidade por conta da amplitude do problema do case versus a restrição de tempo de análise (5 dias corridos em tempo extra).

Tópicos do case

Anatomia do funil de conversão

A anatomia de funil usada pelo time do Quero Bolsa possui apenas quatro passos, o que oferece praticidade e possibilidade de unificação de vocabulário e abordagem de métricas entre todo o time. As etapas são descritas no material original do case.

A distribuição atual da base de amostra se divide assim:

In [54]:
orders_df['Etapa de checkout'].value_counts(sort=True, ascending=True).plot.barh();

Em observação simples, é possível observar a forte atuação dos gargalos das etapas B: Registrado para C:Comprometido, e também de C:Comprometido para D: Pago. A existência de taxa de perda perto de 50% em relação a etapa anterior demonstra espaço para atuações de melhoria.

Segmentação dos gargalos

Origem do lead (Como conheceu o QB)

Para a análise da origem do lead a base foi separada nas fontes de acesso mais relevantes:

  • amigo
  • email
  • facebook
  • faculdade
  • google

A base possui atualmente uma anomalia provavelmente decorrente da sequência de preenchimento das informações ao longo do funil: na evolução dos passos, em muitas dimensões, a forma de funil é quebrada. Provavelmente a informação de 'Como você conheceu o QB' é preenchida apenas em passos posteriores, o que vai contaminando a forma conforme a segmentação buscada.

In [55]:
segmented_refferal_funnels = display_segmented_funnels(
    filtered_refferal_orders_df, 
    'Etapa de checkout', 
    'Como conheceu o QB'
);
Como conheceu o QB - distribuição bruta
Como conheceu o QB amigo email facebook faculdade google
A: Iniciado 1279 156 761 585 11066
B: Registrado 1658 223 724 480 17808
C: Comprometido 873 129 377 327 9690
D: Pago 751 42 186 602 4123
Como conheceu o QB - percentual de retenção em relação à boca do funil
Como conheceu o QB amigo email facebook faculdade google
A: Iniciado 0.771411 0.699552 1.000000 0.971761 0.621406
B: Registrado 1.000000 1.000000 0.951380 0.797342 1.000000
C: Comprometido 0.526538 0.578475 0.495401 0.543189 0.544137
D: Pago 0.452955 0.188341 0.244415 1.000000 0.231525
Como conheceu o QB - percentual de retenção em relação ao passo anterior
Como conheceu o QB amigo email facebook faculdade google
A: Iniciado 0.000000 0.000000 0.000000 0.000000 0.000000
B: Registrado 1.296325 1.429487 0.951380 0.820513 1.609254
C: Comprometido 0.526538 0.578475 0.520718 0.681250 0.544137
D: Pago 0.860252 0.325581 0.493369 1.840979 0.425490
Como conheceu o QB - percentual de perda em relação ao passo anterior
Como conheceu o QB amigo email facebook faculdade google
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000
B: Registrado -0.296325 -0.429487 0.048620 0.179487 -0.609254
C: Comprometido 0.473462 0.421525 0.479282 0.318750 0.455863
D: Pago 0.139748 0.674419 0.506631 -0.840979 0.574510
Gargalo B: Registrado para C: Comprometido

ℹ️ Taxa de perda mais alta para indicações de amigo (47.34%).

ℹ️ Taxa de perda mais baixa para indicações da faculdade (31.87%).

☝️ Indicações da faculdade performando melhor nesse gargalo. Indica um caminho de explorar ações de aquisição via caminho institucional (divulgação do Quero Bolsa na Faculdade).

Gargalo C: Comprometido para D: Pago

ℹ️ Taxa de perda mais alta para indicações de email (67.44%).

ℹ️ Taxa de perda mais baixa para indicações de amigo (13.97%).

☝️ Indicações de amigo com performance melhor na etapa final de fechamento. Pode ser resultado intermediário do programa Quero Pontos. A análise carece de informações para achar as teses de atuação e aprimoramento do programa.

Tipo do pagamento

In [56]:
segmented_paymment_funnels = display_segmented_funnels(
    filtered_payment_orders_df, 
    'Etapa de checkout', 
    'Tipo do Pagamento'
);
Tipo do Pagamento - distribuição bruta
Tipo do Pagamento Boleto CreditCard
D: Pago 3640 2583
Tipo do Pagamento - percentual de retenção em relação à boca do funil
Tipo do Pagamento Boleto CreditCard
D: Pago 1.0 1.0
Tipo do Pagamento - percentual de retenção em relação ao passo anterior
Tipo do Pagamento Boleto CreditCard
D: Pago 0 0
Tipo do Pagamento - percentual de perda em relação ao passo anterior
Tipo do Pagamento Boleto CreditCard
D: Pago 1.0 1.0
In [57]:
paid_total = len(orders_df[orders_df['Etapa de checkout'] == 'D: Pago'])
In [58]:
paid_total
Out[58]:
6223
In [59]:
compromise_total = len(orders_df[orders_df['Etapa de checkout'] == 'C: Comprometido'])
In [60]:
compromise_total
Out[60]:
12567
In [61]:
compromise_total - paid_total
Out[61]:
6344

☝️ Numericamente, a quantidade de pagamentos efetuados explicitamente via Boleto é maior (3640 amostras) contra CreditCard (2583 amostras).

A informação de pagamento só é anotada na etapa D: Pago, e não registrada nos passos anteriores. Há algumas formas de medir comparativamente e além do óbvio o quanto o boleto performa mais do que o cartão, mas seriam necessários outros datapoints.

Pela amostra de dados, estimo cerca de 6344 boletos emitidos e não-pagos, baseado em informações da fase anterior C: Comprometido.

Meio Intenções Pagamentos Conversão
Boleto 9984 3640 36.45%
Cartão 2583 2583 100.00%

A possibilidade de adiamento do pagamento do boleto é uma vantagem ao cliente, mas ao mesmo tempo, dá margem para desistência ou arrependimento apesar do compromisso de fechamento. Isso pode responder por parte do volume de perdas.

Para o consumidor, a vantagem de parcelamento do cartão é muito atrativa, o que ajuda a diluir o custo da pré-matrícula, que é relativamente alto em função da mensalidade final.

Modalidade do curso

In [62]:
segmented_course_type_funnels = display_segmented_funnels(
    orders_df, 
    'Etapa de checkout', 
    'Modalidade do curso'
);
Modalidade do curso - distribuição bruta
Modalidade do curso EaD Presencial Semipresencial
A: Iniciado 5031 19466 184
B: Registrado 3470 18603 184
C: Comprometido 2744 9697 126
D: Pago 1295 4858 69
Modalidade do curso - percentual de retenção em relação à boca do funil
Modalidade do curso EaD Presencial Semipresencial
A: Iniciado 1.000000 1.000000 1.000000
B: Registrado 0.689724 0.955666 1.000000
C: Comprometido 0.545418 0.498151 0.684783
D: Pago 0.257404 0.249563 0.375000
Modalidade do curso - percentual de retenção em relação ao passo anterior
Modalidade do curso EaD Presencial Semipresencial
A: Iniciado 0.000000 0.000000 0.000000
B: Registrado 0.689724 0.955666 1.000000
C: Comprometido 0.790778 0.521260 0.684783
D: Pago 0.471939 0.500980 0.547619
Modalidade do curso - percentual de perda em relação ao passo anterior
Modalidade do curso EaD Presencial Semipresencial
A: Iniciado 1.000000 1.000000 1.000000
B: Registrado 0.310276 0.044334 0.000000
C: Comprometido 0.209222 0.478740 0.315217
D: Pago 0.528061 0.499020 0.452381
Gargalo B: Registrado para C: Comprometido

ℹ️ Taxa de perda mais alta para leads de Presencial (47.87%).

ℹ️ Taxa de perda mais baixa para leads da EaD (20.92%).

☝️ Investigar o que leva EaD a ter a menor taxa de perda nesse segmento, dado que a taxa de perda das outras modalidades estar mais próximas da média.

Gargalo C: Comprometido para D: Pago

ℹ️ Taxa de perda mais alta para leads de EaD (47.87%).

ℹ️ Taxa de perda mais baixa para leads da Semipresencial (45.23%).

☝️ Aqui a taxa de perda de EaD se move para algo mais próximo da média, com o semipresencial performando um pouco melhor.

Nível do curso

In [63]:
segmented_course_level_funnels = display_segmented_funnels(
    filtered_level_orders_df, 'Etapa de checkout', 'Nível do curso'
);
Nível do curso - distribuição bruta
Nível do curso Bacharelado (graduação) Graduação Licenciatura (graduação) Pós-graduação Lato Sensu Tecnólogo (graduação)
A: Iniciado 14504 1135 2260 2921 3452
B: Registrado 13768 1068 1728 2009 3278
C: Comprometido 7235 705 1159 1399 1860
D: Pago 3629 448 490 560 992
Nível do curso - percentual de retenção em relação à boca do funil
Nível do curso Bacharelado (graduação) Graduação Licenciatura (graduação) Pós-graduação Lato Sensu Tecnólogo (graduação)
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000
B: Registrado 0.949255 0.940969 0.764602 0.687778 0.949594
C: Comprometido 0.498828 0.621145 0.512832 0.478946 0.538818
D: Pago 0.250207 0.394714 0.216814 0.191715 0.287370
Nível do curso - percentual de retenção em relação ao passo anterior
Nível do curso Bacharelado (graduação) Graduação Licenciatura (graduação) Pós-graduação Lato Sensu Tecnólogo (graduação)
A: Iniciado 0.000000 0.000000 0.000000 0.000000 0.000000
B: Registrado 0.949255 0.940969 0.764602 0.687778 0.949594
C: Comprometido 0.525494 0.660112 0.670718 0.696366 0.567419
D: Pago 0.501589 0.635461 0.422778 0.400286 0.533333
Nível do curso - percentual de perda em relação ao passo anterior
Nível do curso Bacharelado (graduação) Graduação Licenciatura (graduação) Pós-graduação Lato Sensu Tecnólogo (graduação)
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000
B: Registrado 0.050745 0.059031 0.235398 0.312222 0.050406
C: Comprometido 0.474506 0.339888 0.329282 0.303634 0.432581
D: Pago 0.498411 0.364539 0.577222 0.599714 0.466667
Gargalo B: Registrado para C: Comprometido

ℹ️ Taxa de perda mais alta para leads de Bacharelado (graduação) (47.45%).

ℹ️ Taxa de perda mais baixa para leads da Pós-graduação Lato Sensu (30.36%).

☝️ Estudante de graduação que se registra desistindo mais do que os outros estudantes nessa etapa.

Gargalo C: Comprometido para D: Pago

ℹ️ Taxa de perda mais alta para leads de Pós graduação Lato Senso (59.97%).

ℹ️ Taxa de perda mais baixa para leads da Bacharelado (graduação) (36.45%).

☝️ Observa-se a inversão de taxas entre as etapas (natural de progressão de funil). Encontrar as resistências mais comuns que estão fazendo o estudante de Pós desistir do compromisso.

Localidade do curso

In [64]:
segmented_uf_funnels = display_segmented_funnels(
    filtered_campus_state_df, 
    'Etapa de checkout', 
    'Estado do campus'
);
Estado do campus - distribuição bruta
Estado do campus AM BA DF MG PE RJ SP
A: Iniciado 2245 935 1654 1433 1070 2929 8276
B: Registrado 1916 750 1499 1087 876 2832 8492
C: Comprometido 1240 530 876 841 472 1503 3919
D: Pago 416 187 476 352 243 580 2569
Estado do campus - percentual de retenção em relação à boca do funil
Estado do campus AM BA DF MG PE RJ SP
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.974564
B: Registrado 0.853452 0.802139 0.906288 0.758548 0.818692 0.966883 1.000000
C: Comprometido 0.552339 0.566845 0.529625 0.586881 0.441121 0.513144 0.461493
D: Pago 0.185301 0.200000 0.287787 0.245639 0.227103 0.198020 0.302520
Estado do campus - percentual de retenção em relação ao passo anterior
Estado do campus AM BA DF MG PE RJ SP
A: Iniciado 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
B: Registrado 0.853452 0.802139 0.906288 0.758548 0.818692 0.966883 1.026100
C: Comprometido 0.647182 0.706667 0.584390 0.773689 0.538813 0.530720 0.461493
D: Pago 0.335484 0.352830 0.543379 0.418549 0.514831 0.385895 0.655524
Estado do campus - percentual de perda em relação ao passo anterior
Estado do campus AM BA DF MG PE RJ SP
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
B: Registrado 0.146548 0.197861 0.093712 0.241452 0.181308 0.033117 -0.026100
C: Comprometido 0.352818 0.293333 0.415610 0.226311 0.461187 0.469280 0.538507
D: Pago 0.664516 0.647170 0.456621 0.581451 0.485169 0.614105 0.344476
Gargalo B: Registrado para C: Comprometido

ℹ️ Taxa de perda mais alta na praça de SP (53.85%).

ℹ️ Taxa de perda mais baixa na praça de MG (22.63%).

☝️ Praça de SP performando mal na conversão de Registrado para Comprometido porém performando melhor no passo seguinte do funil (Pago).

Gargalo C: Comprometido para D: Pago

ℹ️ Taxa de perda mais alta na praça de AM (66.45%).

ℹ️ Taxa de perda mais baixa na praça de SP (34.44%).

☝️ Estado de SP apresentando melhor performance de conversão. Aqui valeria a pena refinar o lead por cidade dentro de São Paulo, para sentir variações entre o interior e capitais. Por conta do volume de leads, SP puxa o indicador para melhor performance. A atuação deve se dividir entre continuar aprimorando a performance de SP e também descobrir que estímulos existem em SP que podem ser replicados à outras praças.

☝️ Verificaria também a capilaridade presencial das ofertas nos estados que estão performando mal. Será que a distância entre a casa da pessoa e a faculdade tem sido um elemento que a leva a desistir da bolsa?

Ano que prestou o ENEM

In [65]:
segmented_enem_funnels = display_segmented_funnels(
    orders_df[orders_df['Ano que prestou ENEM'] > 0], 
    'Etapa de checkout', 
    'Ano que prestou ENEM'
);
Ano que prestou ENEM - distribuição bruta
Ano que prestou ENEM 2009 2010 2011 2012 2013 2014 2015 2016
A: Iniciado 94 140 220 240 433 1103 3319 273
B: Registrado 109 226 281 310 581 1478 4292 270
C: Comprometido 58 134 151 178 321 720 2221 127
D: Pago 48 59 92 105 149 381 1267 36
Ano que prestou ENEM - percentual de retenção em relação à boca do funil
Ano que prestou ENEM 2009 2010 2011 2012 2013 2014 2015 2016
A: Iniciado 0.862385 0.619469 0.782918 0.774194 0.745267 0.746279 0.773299 1.000000
B: Registrado 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 0.989011
C: Comprometido 0.532110 0.592920 0.537367 0.574194 0.552496 0.487145 0.517474 0.465201
D: Pago 0.440367 0.261062 0.327402 0.338710 0.256454 0.257781 0.295200 0.131868
Ano que prestou ENEM - percentual de retenção em relação ao passo anterior
Ano que prestou ENEM 2009 2010 2011 2012 2013 2014 2015 2016
A: Iniciado 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
B: Registrado 1.159574 1.614286 1.277273 1.291667 1.341801 1.339982 1.293161 0.989011
C: Comprometido 0.532110 0.592920 0.537367 0.574194 0.552496 0.487145 0.517474 0.470370
D: Pago 0.827586 0.440299 0.609272 0.589888 0.464174 0.529167 0.570464 0.283465
Ano que prestou ENEM - percentual de perda em relação ao passo anterior
Ano que prestou ENEM 2009 2010 2011 2012 2013 2014 2015 2016
A: Iniciado 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000
B: Registrado -0.159574 -0.614286 -0.277273 -0.291667 -0.341801 -0.339982 -0.293161 0.010989
C: Comprometido 0.467890 0.407080 0.462633 0.425806 0.447504 0.512855 0.482526 0.529630
D: Pago 0.172414 0.559701 0.390728 0.410112 0.535826 0.470833 0.429536 0.716535
Gargalo B: Registrado para C: Comprometido

ℹ️ Taxa de perda mais alta na safra de ENEM 2016 (52.96%).

ℹ️ Taxa de perda mais baixa na safra de ENEM 2010 (40.70%).

Gargalo C: Comprometido para D: Pago

ℹ️ Taxa de perda mais alta na safra de ENEM 2016 (71.65%).

ℹ️ Taxa de perda mais baixa nas safras de ENEM 2009 (17.24%).

☝️ A base de dados não deixa claro se a safra da amostra se refere à inscrições do mesmo ano/semestre ou se a amostra foi coletada de maneira distribuída no tempo. Não existe na amostra um campo para montagem de base temporal. Se as inscrições dos estudantes da amostra tiverem sido feitas na mesma época, há um indicativo que o estudante com a nota de ENEM mais recente está mais propenso a desistir. Há de se descobrir se existem fatores externos ao Quero Bolsa contribuindo para a quebra do funil nesse momento (71%), por exemplo, o estudante estar preenchendo o cadastro antes de obter plena informação sobre as opções que ele terá na mesa ou se matriculando diretamente na instituição.

Dúvidas dos usuários

Conjunto de dados

O desafio oferece uma base de dados com o total de 107 dúvidas de usuários registradas. Esse número caiu para 102 amostras após remoção de registros duplicados.

O layout de dados disponibilizado foi:

Coluna Tipo de informação
Universidade Texto
Curso Texto
Pergunta Texto

Amostra da base de dados (cinco primeiros registros):

In [66]:
questions_df[['Universidade', 'Curso', 'Pergunta']].head()
Out[66]:
Universidade Curso Pergunta
0 Estácio Engenharia Mecânica Minha empresa e parceira da Estácio e tenho...
1 UNIP Direito Gente isso funciona mesmo?
2 UNIJORGE Administração Qual o critério para angariar a bolsa na Unij...
3 FAUC / AUM Educação Física Quero esta bolsa de educação física como faço
4 UNIP NaN Por que os alunos que já estão matriculados n...

Para análise textual, foi utilizada a base de stopwords do NLTK (Natural Language Toolkit), somado à uma base customizada de palavras. As "stopwords" são palavras que podem ser consideradas irrelevantes para o processamento da linguagem natural. Dessa forma, a base de dados ganhou uma nova coluna:

In [67]:
questions_df[['Pergunta', 'Pergunta NSW']].head()
Out[67]:
Pergunta Pergunta NSW
0 Minha empresa e parceira da Estácio e tenho... empresa parceira estácio 40 desconto queria sa...
1 Gente isso funciona mesmo? gente funciona
2 Qual o critério para angariar a bolsa na Unij... critério angariar bolsa unijorge
3 Quero esta bolsa de educação física como faço quero bolsa educação física faço
4 Por que os alunos que já estão matriculados n... alunos matriculados podem conseguir bolsa prog...

Análise de wordcloud

Para exploração inicial, após a remoção das stopwords, foi gerado um diagrama de Wordcloud para explorar a frequência do conteúdo de dúvidas dos usuários:

In [68]:
wordcloud = WordCloud(
    background_color='white', 
    max_words=500
).generate(questions_words)
plt.figure(
    dpi=300,
    figsize=(15,8)
)
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.title('Palavras')
plt.show()

☝️ A interpretação inicial da wordcloud a primeira vista evoca alguns sentimentos interesantes: A primeira palavra mais importante está relacionada ao destino acadêmico do aluno: O curso. Dúvidas sobre o que vai fazer. A segunda e terceira palavras coincidem com o nome do produto: quero bolsa.

Análise de colocações (NLTK)

A análise de colocações do NLTK apresenta o resultado a seguir:

In [69]:
text.collocations()
quero bolsa; gostaria saber; engenharia produção; curso gestão;
conseguir bolsa; curso direito; curso técnico; distancia curso; vocãªs
curso; saber posso; gostaria fazer; curso engenharia; mensalidade
curso; fazer curso; bolsa curso

☝️Esse tipo de análise em processamento de linguagem natural indica expressões que consistem em mais de uma palavra, mas que podem dado um determinado contexto apresentar significado de palavras individuais.

Como a base amostral possui apenas cem registros, o NLKT produz algum resultado interessante. Mas é provável que o mesmo algoritmo rodando numa base completa vá identificar expressões comumente usadas pelos usuários para se referirem a coisas dentro do contexto do produto.

Exemplos de colocações:

quero bolsa, gostaria fazer, fazer curso - Expressão textual do desejo de estudar.

gostaria saber, saber posso - Expressão textual do desejo de saber mais sobre o Quero Bolsa.

curso técnico, curso direito, curso engenharia, curso gestão, curso engenharia - Expressão textual da existência de dúvidas técnicas sobre o curso de interesse.

bolsa curso, mensalidade curso - Expressão textual de preocupação sobre mensalidades.

distância curso - Expressão textual da necessidade de informações por modalidade de ensino.

Análise de frequência de palavras

O NLTK nos ajuda também a perceber a frequência de palavras dentro da amostra de questões:

In [70]:
plt.figure(figsize=(12,6))
text.vocab().plot(30, cumulative=False)

☝️ O gráfico acima mostra claramente uma Hierarquia de termos a serem explorados na UX do site, na redação da arquitetura (processo de labeling).

A execução desse mesmo tipo de análise com a amostra real irá dar dicas onde os termos aqui priorizados poderão ser usados para substituir sinônimos nos textos de conteúdo e títulos do site, aproximando a redação do Quero Bolsa aos termos a que os usuários estão mais acostumados.

O NLTK também oferece uma visão interessante sobre o contexto onde as palavras capturadas pela análise de frequência aparecem. Vamos aqui explorar alguns contextos:

In [71]:
word = 'curso'
display(HTML('<h5>{}</h5>'.format(word)));
pure_text.concordance(word);
curso
Displaying 25 of 25 matches:
la ? Posso usar o quero bolsa para o curso Enfermagem Forense Obrigadalia ? QUE
a Quantos custa a mensalidade para o curso de direito ? Quanto está a graduação
terapia e nutrição. ? Mensalidade do curso de direito qual a taxa de aumento da
o custa e o que preciso para fazer o curso de direito gostaria ir tem esperançã
oe ! Oi oi boa noite qual o valor do curso sem a bolsa ? No site `` http : //po
 valor e³R $ 354 POR FAVOR COLOCA O CURSO DE DESIGN GRíFICO NO PERíODO DA MANH
! Gostaria de saber se este ano terá curso de convalidação de Teologia ? Precis
o de resposta com urgência . Se tem curso de auxiliar bucal tem Engenharia de 
staria de saber se tem bolsas para o curso de técnico em segurançã do trabalho 
õe Tem gastronomia ? ? Vocês tem o curso de técnico em patologia ? Só tem ess
 preço das mensalidades Vocês tem o curso de licenciatura em Letras ( língua p
) Quero saber se vai tá disponível o curso de educação fisica Tem bolsa para o 
 de educação fisica Tem bolsa para o curso gestão de segurançã privada ? Tem cu
so gestão de segurançã privada ? Tem curso psicologia em Manaus ? Os professore
de ? é presencial ou a distancia ? o curso de serviço social é a distancia ? Es
 serviço social é a distancia ? Esse Curso e Presencial ou a Distância ? Pode 
¢ncia ? Pode ser feito a destancia O curso de engenharia elétrica semi presenci
ção é credenciada pelo MEC EAD ? e o curso de engenharia de produção ead é reco
 reconhecido pelo MEC qual a nota do curso segundo o mec ? o curso atende as no
al a nota do curso segundo o mec ? o curso atende as normas do MEC ? Gostaria d
Ha alguma forma de estagio no fim do curso ... gostei dessa faculdade.. O estág
ais são as disciplinas oferecidas no curso de gestão de processos ? Olá gostari
lho federal de farmácia so reconhece curso de graduação de 5 anos . Sendo que n
sper e ate em outras faculdades vejo curso de farmácia ministrado em 4 anos . O
ando são os vestibulares Horários do curso gestão da qualidade Quando sera´ o 

☝️Palavra curso insere-se nos contextos de:

```curso/disponibilidade``` Disponibilidade do curso no sistema. *10 ocorrências*
```curso/custo``` Custo de mensalidade. *4 ocorrências*
```curso/reputação``` Aprovação pelo MEC e outros. *3 ocorrências*
```curso/modalidade``` Modalidade presencial, semi-presencial, distância. *2 ocorrências*
```curso/tempo``` Duração do curso. *1 ocorrência*
In [72]:
word = 'bolsa'
display(HTML('<h5>{}</h5>'.format(word)));
pure_text.concordance(word);
bolsa
Displaying 23 of 23 matches:
ue vou pagar .ou seja se posso ter 2 bolsa Gente isso funciona mesmo ? Qual o c
mo ? Qual o critério para angariar a bolsa na Unijorge ? Quero esta bolsa de ed
iar a bolsa na Unijorge ? Quero esta bolsa de educação física como faço Por que
tão matriculados não podem conseguir bolsa pelo programa quero bolsa ? . Visto 
 conseguir bolsa pelo programa quero bolsa ? . Visto que é melhor liberar uma b
a ? . Visto que é melhor liberar uma bolsa do que perder uma matrícula . Oi boa
a matrícula . Oi boa tarde . O quero bolsa funciona mesmo na unp ? no caso é só
zer a matrícula ? Posso usar o quero bolsa para o curso Enfermagem Forense Obri
GO NA FATEPA como posso consegur uma bolsa Gostaria de fazer pedagogia Boa noit
agogia Boa noite.Meu irmão conseguiu bolsa de 50 % pelo educa mais como posso f
ino medio Como faço pra adquirir uma bolsa de enfermagem noturno em Belém Ainda
elém Ainda da tempo de conseguir uma bolsa nesse semestre ? ingresso ainda no 1
esso ainda no 1o semestre 2017 Com a bolsa do educa mais brasil e possivel acre
 brasil e possivel acrescentar outra bolsa Como faço pra ganha meia bolca para 
mo ? se a pessoa o aluno conseguir a bolsa de estudo a bolsa de ciência da com
 aluno conseguir a bolsa de estudo a bolsa de ciência da computação estava em 
nos e um sonho a ser realizado Quero bolsa de radiologia Como faço para con seg
ologia Como faço para con seguir uma bolsa .pois quero muito . Boa noite ! Minh
 é colombiana como faço pra ganhar a bolsa de 50 % de desconto ? como conseguir
de desconto ? como conseguir o quero bolsa para odonto ? Como funciona quero bo
sa para odonto ? Como funciona quero bolsa quanto pago na matricula Jí TENHO O 
oa noite qual o valor do curso sem a bolsa ? No site `` http : //pos.estacio.br
nível o curso de educação fisica Tem bolsa para o curso gestão de segurançã pri

☝️Palavra bolsa insere-se nos contextos de:

```curso/disponibilidade``` Disponibilidade do curso no sistema. *5 ocorrências*
```quero/confiabilidade``` Duvidas se o produto funciona. *3 ocorrências*
```quero/requisitos``` Requisitos para conseguir a bolsa. *3 ocorrências*
```curso/custo``` Custo de mensalidade. *3 ocorrências*
```quero/fluxo``` Etapas para conseguir a bolsa. *3 ocorrências*
```curso/composição``` Possibilidade de composição de bolsas. *2 ocorrências*
```quero/prazo``` Prazo para conseguir uma bolsa (janela de tempo). *2 ocorrências*
```quero/requisitos``` Requisitos para conseguir a bolsa. *1 ocorrências*
In [73]:
word = 'quero'
display(HTML('<h5>{}</h5>'.format(word)));
pure_text.concordance(word);
quero
Displaying 13 of 13 matches:
 para angariar a bolsa na Unijorge ? Quero esta bolsa de educação física como f
 podem conseguir bolsa pelo programa quero bolsa ? . Visto que é melhor liberar
der uma matrícula . Oi boa tarde . O quero bolsa funciona mesmo na unp ? no cas
e e fazer a matrícula ? Posso usar o quero bolsa para o curso Enfermagem Forens
rso Enfermagem Forense Obrigadalia ? QUERO FAZER TECNICO Enfermagem QUERO COMEÃ
lia ? QUERO FAZER TECNICO Enfermagem QUERO COMEÇA LOGO NA FATEPA como posso co
o 54 anos e um sonho a ser realizado Quero bolsa de radiologia Como faço para c
faço para con seguir uma bolsa .pois quero muito . Boa noite ! Minha afilhada é
 50 % de desconto ? como conseguir o quero bolsa para odonto ? Como funciona qu
ro bolsa para odonto ? Como funciona quero bolsa quanto pago na matricula Jí TE
pre matricula pagamento a boleto não quero mais ainda não paguei Valor engenhar
ra em Letras ( língua portuguesa ? ) Quero saber se vai tá disponível o curso d
Olá gostaria de fazer Estética porém quero focar Mais na estética clínica.. Ter
In [74]:
word = 'gostaria'
display(HTML('<h5>{}</h5>'.format(word)));
pure_text.concordance(word);
gostaria
Displaying 9 of 9 matches:
ATEPA como posso consegur uma bolsa Gostaria de fazer pedagogia Boa noite.Meu ir
estre/ano ? Boa dia abençoado ( a ) gostaria de saber quanto custa e o que preci
eciso para fazer o curso de direito gostaria ir tem esperançã de estuda nessa fa
RíODO DA MANHÃ TAMBÉM ? ? ? ! ! ! Gostaria de saber se este ano terá curso de 
e produção Tem enfermagem Bom dia ! Gostaria de saber se tem bolsas para o curso
? o curso atende as normas do MEC ? Gostaria de saber sobre a regulamentação e q
elo MEC ? ? Quala nota mo mec ? ola gostaria de saber se eu posso financiar o re
 curso de gestão de processos ? Olá gostaria de fazer Estética porém quero focar
 clínica.. Teria como ? Boa noite ! Gostaria de ter acesso a grade curricular e 

☝️Palavras quero e gostaria inserem-se nos contextos de:

```curso/disponibilidade``` Disponibilidade do curso no sistema. *12 ocorrências*
```curso/custo``` Custo de mensalidade. *4 ocorrências*
```quero/fluxo``` Etapas para conseguir a bolsa. *2 ocorrências*
```curso/reputação``` Aprovação pelo MEC e outros. *2 ocorrências*
```quero/confiabilidade``` Duvidas se o produto funciona. *1 ocorrência*
```quero/requisitos``` Requisitos para conseguir a bolsa. *1 ocorrência*
```curso/disponibilidade``` Disponibilidade do curso no sistema. *1 ocorrência*
```curso/ementa``` Grade disciplinar do curso. *1 ocorrência*
In [75]:
word = 'fazer'
display(HTML('<h5>{}</h5>'.format(word)));
pure_text.concordance(word);
fazer
Displaying 9 of 9 matches:
? no caso é só levar o comprovante e fazer a matrícula ? Posso usar o quero bol
fermagem Forense Obrigadalia ? QUERO FAZER TECNICO Enfermagem QUERO COMEÇA LOG
posso consegur uma bolsa Gostaria de fazer pedagogia Boa noite.Meu irmão conseg
er quanto custa e o que preciso para fazer o curso de direito gostaria ir tem e
estão de processos ? Olá gostaria de fazer Estética porém quero focar Mais na e
ONVALIDAM CREDITOS Oi como faço para fazer minha inscrição ? ? ? quando abre no
ultimo ano de psicologia também pode fazer o curso ? Eu consigo fazer fies para
mbém pode fazer o curso ? Eu consigo fazer fies para o curso de nutrição ? Eu p
 em arapongas mas se eu quiser posso fazer em Curitiba ? EU Jí ESTOU NO QUARTO 

☝️Palavra fazer insere-se nos contextos de:

```curso/disponibilidade``` Disponibilidade do curso no sistema. *4 ocorrências*
```quero/fluxo``` Etapas para conseguir a bolsa. *3 ocorrências*
```quero/requisitos``` Requisitos para conseguir a bolsa. *3 ocorrências*
```curso/custo``` Custo de mensalidade. *2 ocorrências*
In [76]:
word = 'saber'
display(HTML('<h5>{}</h5>'.format(word)));
pure_text.concordance(word);
saber
Displaying 8 of 8 matches:
 saber se posso ganha esse 50 % no valor va
 Boa dia abençoado ( a ) gostaria de saber quanto custa e o que preciso para fa
NHÃ TAMBÉM ? ? ? ! ! ! Gostaria de saber se este ano terá curso de convalidaç
Tem enfermagem Bom dia ! Gostaria de saber se tem bolsas para o curso de técnic
Letras ( língua portuguesa ? ) Quero saber se vai tá disponível o curso de educ
tende as normas do MEC ? Gostaria de saber sobre a regulamentação e quais certi
 Quala nota mo mec ? ola gostaria de saber se eu posso financiar o restante da 
a de ter acesso a grade curricular e saber quais os professores que ministram a

☝️Palavra saber insere-se nos contextos de:

```curso/custo``` Custo de mensalidade. *2 ocorrências*
```curso/disponibilidade``` Disponibilidade do curso no sistema. *2 ocorrências*
```quero/requisitos``` Requisitos para conseguir a bolsa. *1 ocorrência*
```quero/fluxo``` Etapas para conseguir a bolsa. *1 ocorrência*
```curso/reputação``` Aprovação pelo MEC e outros. *1 ocorrência*
```curso/composição``` Possibilidade de composição de bolsas. *1 ocorrência*
```curso/ementa``` Grade disciplinar do curso. *1 ocorrência*

Distribuição da amostra por curso (Top 10)

In [77]:
questions_df['Curso'].value_counts(sort=True, ascending=False)[0:10].plot.bar(figsize=[10,5]);

Distribuição da amostra por universidade (Top 10)

In [78]:
questions_df['Universidade'].value_counts(sort=True, ascending=False)[0:10].plot.bar(figsize=[10,5]);

UX e Análise heurística do site

Geral

Na amostra de usuários o maior volume de dúvidas está associado ao pilar curso/disponibilidade, um problema essencialmente de listing do estoque de parcerias da Quero Bolsa. O listing não está presente como assunto primário do Cabeçalho e da Seção principal do site: fica disponível indiretamente como resultado da pesquisa.

Title (HTML Title)

O title Bolsas de estudo de até 75% | Quero Bolsa possui uma amplitude de promessa muito grande. Afirma que é possível conseguir esse nível de redução na plataforma. A partir da análise da base de dados de ordens fica claro que a promessa é verdadeira e pode ser explorada.

In [79]:
bins=30

plt.figure(
    figsize=(15,8)
)
plt.hist(
    orders_df['Preço cheio no comprovante'].dropna().clip(lower=100, upper=2000), 
    bins=bins, 
    alpha=0.5, 
    rwidth=0.8,
    label='Preço cheio'
)
plt.hist(
    orders_df['Preço com desconto no comprovante'].dropna().clip(lower=100, upper=2000),
    bins=bins,
    alpha=0.5,
    rwidth=0.8,
    label='Preço com desconto'
)
plt.title('Distribuição por preço cheio / preço com desconto')
plt.legend(loc='upper right')
plt.show()

☝️Histograma da distribuição de preços proveniente da base de ordens. O deslocamento da distribuição da curva normal expressa o volume de descontos real que o Quero Bolsa oferece. O pico de desconto na base é de 80%, com desconto médio de 35%.

In [80]:
orders_df['Percentual de desconto'].describe()
Out[80]:
count    18790.000000
mean        35.606495
std         12.049557
min          5.000000
25%         29.790000
50%         30.000000
75%         44.000000
max         80.290000
Name: Percentual de desconto, dtype: float64

Cabeçalho

Link para o pop de Como funciona é o elemento de abertura do site (barra superior), disponível como primeira opção na direção de leitura ocidental. A impressão que dá é que em versões passadas, poderia não estar claro para os usuários os aspectos de quero/confiabilidade (coletar sinais de que o Quero Bolsa realmente funciona) e quero/fluxo (me dar uma visão inicial de como a plataforma funciona). A versão atual abstrai em três passos, o que é uma prática legal do mercado do ponto de vista cognitivo por conta da gestão da expectativa do cliente.

A replicação dos 3 passos de como funciona em múltiplos momentos da plataforma deve ajudar na redução de pedidos associados a quero/fluxo.

A versão desktop deixa o box de como funciona escondido no menu, mas coloca a redundância dos passos logo abaixo do card promocional. A versão móvel comprime alguns tópicos do header em um novo menu de ajuda/info.

A logo Quero Bolsa aparece centralizada, o que é atípico, mas parece ser bom. Dá equilíbrio tanto na versão site quanto mobile.

O call to action de área logada com a chamada Entre e ative bolsas exclusivas parece ser um bom coletor de boca de funil.

☝️Exemplo de bom candidato para teste A/B. Parece meio obscuro e solto o argumento de entre e ative bolsas exclusivas.

ℹ️ A parte de ativação de bolsas exclusivas pressupõe ainda um conceito novo chamado "Nota quero". Esse conceito tá meio solto. Do ponto de vista de branding é uma coisa nova a aprender e que inverte a fluência narrativa. quem quer, quer algo (quero bolsa, quero educação). "Nota quero" subverte isso sem entregar vantagem. Esse espaço de interferência com elementos na marca deve ser protegido e só pode ser quebrado se isso retornar um valor significativo.

ℹ️ A coleta de dados para ativação de bolsas exclusivas é legal, mas ela abre um novo fluxo de três passos. Na base de dados, não está explicitado claramente

Explorações de design inserindo mutações e medições no cabeçalho nesse caso parece ser um fruto mais baixo de colher para a progressão dos indicadores.

Seção principal

O formulário de Encontre a sua bolsa de estudo é bastante interessante e está bem balanceado.

O site acertou a minha localização logo de partida, trazendo a minha cidade sensibilizada antes mesmo de usar o location services do navegador, o que é muito positivo.

☝️Para transferir para linguagem natural, testaria "Onde você mora?" ou "Qual a sua cidade?" em substituição a "Qual a sua localização".

Os controles de interface (select box, slider de preço) funcionam bem para desktop ou mobile.

☝️ O campo de "Prefere alguma faculdade?" faz a busca muito abrangente (lista todo o acervo de faculdades ou escolas). Na ordem provável de preenchimento, o sistema já sabe nesse momento em que localidade o usuário está. Para diminuir a chance de falha ao encontrar uma universidade por excesso de informação na caixa de auto-complete, o auto-complete poderia ser segregado entre faculdades próximas da localização do usuário (limite geométrico de uns 100 km, por exemplo) e a lista geral de instituições que atende aos caracteres digitados.

ℹ️ Os elementos de acessibilidade do formulário (principalmente tab index) parecem não estar funcionando bem. É difícil operar o formulário sem o uso de mouse. A janela de análise não permite testar a performance da plataforma em software ledor de tela.

Incentivo ao provimento de informações

Informações de parceiros e cursos (instituições)

A hipótese inicial para incentivo a parceiros para o aumento da quantidade e qualidade de informações oferecidas está ligada a identificar e suprir necessidades informacionais sobre o setor que sejam interessantes para a instuição. Testaria o argumento "me dá informações sobre a sua instituição e cursos" que você acessa aqui o painel consolidao sobre tudo o que está acontecendo e sendo ofertado na região onde você atual.

☝️ Um PM do Quero Bolsa precisa aprender como os tiers de parceiros (instituições) preenchem as vagas de um curso, desvendando o raciocínio do gestor educacional conforme porte, demanda e reputação da instituição, perspectiva de oferta na região da instituição. A elaboração de sugestões sem a entrada no domínio educacional é um exercício positivo de criatividade, mas caracteriza inversão do fluxo de trabalho.

Para instituições com problema de preenchimento de vagas/alunos, a construção de indicadores claros sobre as informações de cursos, reserva de vagas, etc.. Pode também funcionar como elemento estimulante, com sistematização de KPIs semelhantes à profile completeness, porém adaptados para o preenchimento correto da página do curso, elemento fundamental na conversão.

Informações do usuário

O https://avaliacao.querobolsa.com.br/ (Avaliação Quero Bolsa) parece ser um elemento menos maduro na plataforma do Quero Bolsa.

☝️ O conceito Nota Quero / Fazer minha Nota Quero poderia ser trabalhado na perspectiva de produto, em termos de naming, branding e também design da plataforma: hoje tem um aspecto parecido com Google Forms, distoante da plataforma. A principal ferramenta de coleta direta de dados não conversa direito com o restante do produto.

Um grande desafio também é a conciliação das jornadas entre os usuários que se matriculam pelo listing normal versus alcance de bolsa exclusiva.

☝️ Não possuo um número de ENEM válido para ultrapassar o passo "2. Informe sua nota do Enem".

Na página dos cursos, é interessante também observar o volume de avaliações do ponto de vista de quem está estudando, explorando pontos positivos e negativos. Isso coloca a plataforma numa posição de transparência em relação à instituição.

☝️ O estímulo aos usuários na postagem de avaliações passa pela régua de comunicação ativando bolsistas em curso. O programa de refferal apresenta incentivo interessante para o bolsista corrente ganhar desconto em mensalidades. As informações do usuário (alunos) se desdobram nesses dois caminhos: o usuário dentro do funil e o usuário que já passou pelo funil e pode contribuir com a plataforma para novos usuários e enriquecimento da oferta de cursos com testemunhos.

Apostas para o trimestre

Eliminar seletivamente o boleto como meio de pagamento

Após realização de teste A/B para testar a performance da tese, realizar eliminação gradativa do boleto como meio de pagamento, começando pelos cursos de mensalidades com preços menos populares. A ideia é diminuir o gargalo de C: Confirmado para D: Pago com o processamento instantâneo do pagamento da matrícula.

Melhorar atributos de listing de cursos de modo a reduzir o número de dúvidas sobre cursos

Usar repertório de atividades de UX para aprimorar os módulos de busca de cursos e detalhamento de curso para incorporar, hierarquizar ou modificar apresentação de itens comuns que foram mapeados na análise das dúvidas dos usuários.

Avançar na boca do funil em Twitch/YouTube/Instagram Stories/etc

Pelo perfil da base atual de originação recebida, avaliaria testar execução de campanhas de referral com YouTubers e streamers que conversem com o target de audiência da Quero Educação. A gente que está de fora não sabe se isso já foi testado pois provavelmente estou fora da audiência a que a comunicação está sendo direcionada.

A ideia é testar modelos de crescimento baseados em remuneração por código promocional (ganho maior pós-matrícula). Esses novos canais estão ocupando os espaços de influência nas novas gerações. A marca Quero Bolsa acaba sendo apresentada a estudantes ainda no início do ensino médio, para que comecem a entender a plataforma como parte essencial de quando forem escolher a sua faculdade, com reflexo de branding a médio-longo prazo.

Informações para melhores conclusões

A análise pode dispor de mais informações para melhorar a qualidade das análises. São elas:

Tempo de trabalho

O tempo dos testes em cinco dias corridos torna muito difícil o aprofundamento nas questões. O candidato precisa escolher os temas onde vai se aprofundar para performar bem na seleção, contudo, atrapalha a homogeneidade do teste. O grau de maturidade da plataforma e a quantidade de caminhos possíveis para o usuário completar a jornada de se matricular em um curso adiciona pontos intensivos em tempo de análise, junção de fontes de dados, observação do produto, engajamento com o time e conversas com designers, programadores, time de produto e demais pessoas responsáveis.

Quantidade de pontos amostrais - base de questões

A base de questões em torno de 100 pontos amostrais para a base de questões aparenta não permitir inferências ou extrapolação de conclusões.

Analytics

A disponibilização dos acessos de Analytics para o site é de grande utilidade para o Gerente de Produto. Várias dimensões de análise são adicionadas, especialmente o tipo de dispositivo (desktop ou móvel), os dados de localidade, as origens de acesso e o perfil de acesso dos visitantes.

Acesso read-only nas entidades abertas nas bases relacionais

Ferramentas como o Jupyter podem ser instaladas na mesma VPC dos servidores de produção para acessar as bases de dados diretamente e produzir consultas que podem otimizar o levantamento dos indicadores de produto sem onerar os times de tecnologia.

Acesso ao canal WhatsApp e log de mensagens

A análise textual das interações com o WhatsApp alimentam informações para contribuição em outros canais, e de onde pode-se extrair também modificações de tendência em tempo real, permitindo sentir eventos exógenos de mercado e legislação que possam interferir com o funil de aquisição.

Acesso a métricas do 0800

Dentro do pool de canais do Quero Bolsa a obtenção de mais informações sobre o 0800 ajudaria a entender melhor a importância do canal, dando visada da taxa de conversão no canal, a duração do ciclo de vendas (tempo médio), visada de cadência das ligações, apuração de entendimento da sazonalidade do setor, dos padrões em torno dos dias da semana e das horas do dia. Buscaria entender também como funciona o canal 0800 em termos de adicionar confiabilidade para a plataforma.

Análise de benchmark da concorrência

Mapeamento completo e estabelecimento de rotina de atualização de benchmark da concorrência direta do Quero Bolsa dividido por canal (conteúdo e abordagem de canal) e também a parte de abordagem de comunicação (peças, réguas, filmes). Por um lado, é papel do Quero Bolsa inovar e ser seguido. Por outro lado, eventuais boas ideias sobre problemas endereçados pelo setor surgirão, para serem avaliadas precocemente e, se for o caso, incorporada nos produtos. Limitações de tempo para execução do teste impedem a execução de benchmark.

Acesso a versões passadas da plataforma

O histórico de evolução do Quero Bolsa é muito valioso para desvendar soluções atuais que possam ter resolvido problemas conhecidos no passado.